/* 扩展ThinkPHP对象 */

(function($){

	/**

	 * 获取ThinkPHP基础配置

	 * @type {object}

	 */

	var ThinkPHP = window.Think;



	/* 基础对象检测 */

	ThinkPHP || $.error("ThinkPHP基础配置没有正确加载！");



	/**

	 * 解析URL

	 * @param  {string} url 被解析的URL

	 * @return {object}     解析后的数据

	 */

	ThinkPHP.parse_url = function(url){

		var parse = url.match(/^(?:([a-z]+):\/\/)?([\w-]+(?:\.[\w-]+)+)?(?::(\d+))?([\w-\/]+)?(?:\?((?:\w+=[^#&=\/]*)?(?:&\w+=[^#&=\/]*)*))?(?:#([\w-]+))?$/i);

		parse || $.error("url格式不正确！");

		return {

			"scheme"   : parse[1],

			"host"     : parse[2],

			"port"     : parse[3],

			"path"     : parse[4],

			"query"    : parse[5],

			"fragment" : parse[6]

		};

	}



	ThinkPHP.parse_str = function(str){

		var value = str.split("&"), vars = {}, param;

		for(val in value){

			param = value[val].split("=");

			vars[param[0]] = param[1];

		}

		return vars;

	}



	ThinkPHP.parse_name = function(name, type){

		if(type){

			/* 下划线转驼峰 */

			name.replace(/_([a-z])/g, function($0, $1){

				return $1.toUpperCase();

			});



			/* 首字母大写 */

			name.replace(/[a-z]/, function($0){

				return $0.toUpperCase();

			});

		} else {

			/* 大写字母转小写 */

			name = name.replace(/[A-Z]/g, function($0){

				return "_" + $0.toLowerCase();

			});



			/* 去掉首字符的下划线 */

			if(0 === name.indexOf("_")){

				name = name.substr(1);

			}

		}

		return name;

	}



	//scheme://host:port/path?query#fragment

	ThinkPHP.U = function(url, vars, suffix){

		var info = this.parse_url(url), path = [], param = {}, reg;



		/* 验证info */

		info.path || $.error("url格式错误！");

		url = info.path;



		/* 组装URL */

		if(0 === url.indexOf("/")){ //路由模式

			this.MODEL[0] == 0 && $.error("该URL模式不支持使用路由!(" + url + ")");



			/* 去掉右侧分割符 */

			if("/" == url.substr(-1)){

				url = url.substr(0, url.length -1)

			}

			url = ("/" == this.DEEP) ? url.substr(1) : url.substr(1).replace(/\//g, this.DEEP);

			url = "/" + url;

		} else { //非路由模式

			/* 解析URL */

			path = url.split("/");

			path = [path.pop(), path.pop(), path.pop()].reverse();

			path[1] || $.error("ThinkPHP.U(" + url + ")没有指定控制器");



			if(path[0]){

				param[this.VAR[0]] = this.MODEL[1] ? path[0].toLowerCase() : path[0];

			}



			param[this.VAR[1]] = this.MODEL[1] ? this.parse_name(path[1]) : path[1];

			param[this.VAR[2]] = path[2].toLowerCase();



			url = "?" + $.param(param);

		}



		/* 解析参数 */

		if(typeof vars === "string"){

			vars = this.parse_str(vars);

		} else if(!$.isPlainObject(vars)){

			vars = {};

		}



		/* 解析URL自带的参数 */

		info.query && $.extend(vars, this.parse_str(info.query));



		if(vars){

			url += "&" + $.param(vars);

		}



		if(0 != this.MODEL[0]){

			url = url.replace("?" + (path[0] ? this.VAR[0] : this.VAR[1]) + "=", "/")

				     .replace("&" + this.VAR[1] + "=", this.DEEP)

				     .replace("&" + this.VAR[2] + "=", this.DEEP)

				     .replace(/(\w+=&)|(&?\w+=$)/g, "")

				     .replace(/[&=]/g, this.DEEP);



			/* 添加伪静态后缀 */

			if(false !== suffix){

				suffix = suffix || this.MODEL[2].split("|")[0];

				if(suffix){

					url += "." + suffix;

				}

			}

		}



		url = this.APP + url;

		return url;

	}



	/* 设置表单的值 */

	ThinkPHP.setValue = function(name, value){

		var first = name.substr(0,1), input, i = 0, val;

		if(value === "") return;

		if("#" === first || "." === first){

			input = $(name);

		} else {

			input = $("[name='" + name + "']");

		}



		if(input.eq(0).is(":radio")) { //单选按钮

			input.filter("[value='" + value + "']").each(function(){this.checked = true});

		} else if(input.eq(0).is(":checkbox")) { //复选框

			if(!$.isArray(value)){

				val = new Array();

				val[0] = value;

			} else {

				val = value;

			}

			for(i = 0, len = val.length; i < len; i++){

				input.filter("[value='" + val[i] + "']").each(function(){this.checked = true});

			}

		} else {  //其他表单选项直接设置值

			input.val(value);

		}

	}



})(jQuery);

